分享好友 技术首页 技术分类 切换频道

代码覆盖分析工具在嵌入式软件测试中的应用

2020-07-18 13:41120
摘要 介绍覆盖性测试技术的基本概念以及其在嵌入式系统中的基本工作过程;通过将覆盖测试工具Bullseye-Coverage移植到嵌入式操作系统(Nuclcus)的具体实现过程,说明系统要求、系统结构,以及具体的技术实现细节和步骤。其中,如何解决覆盖数据传输问题系统实现的关键点。
  关键词 覆盖性测试 嵌入式系统 代码插装 Bullsege Covcrage 
  软件测试的重要性是毋庸置疑的。如何以zui少的力和资源投入,在zui短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,是软件公司探索和追求的目标。然而大家都知道,从理论上讲测试是永无止境的,只要不断测试就一定能不断发现问题.那么究竟如何度量测试的进度,如何判断测试可以完结呢?些,可以依靠测试覆盖率的分析来实现。嵌入式软件系统也不例外。
  1 代码覆盖分析
  代码覆盖分析过程包含以下几个方面:
  ◇通过一组覆盖测试数据发现和分析那些没有被运行到的代码;
  ◇为了提高代码覆盖率而设计新的测试用例;
  ◇确定代码覆盖的定量标准,这XXX数据也间接地反映测试质量;
  ◇识别那些冗余的测试用例。
  代码覆盖分析是一种白盒测试方法,因为覆盖分析需要访问测试代码本身,且经常需要重新编泽程序,以程序的内部结构为基础来设计测试案例。其基本准则是测试案例要尽可能多地覆盖程序的内部逻辑结构,发现其中的错误和问题。另外要注意的是,覆盖分析并不是为了提高程序本身的质量而是为了确保测试用例的质量。一般来说,覆盖分析通常应用在软件测试的早期,即单元测试阶段。在软件发布版本阶段是不需要运行软件覆盖分析的。 
  2 覆盖分析在嵌入式系统上的问题
  嵌入式软件的开发与通用软件的开发很大的不同点在于:嵌入式系统需要采用交叉开发的方式,即开发工具运行在软硬件配置丰富的宿主机上,而嵌入式应用程序则运行在软硬件资源相对缺乏的目标机上。所以针对覆盖分析测试,嵌入式系统的困难之一就是如何获取测试产生的覆盖数据。犬多数的覆盖分析测试工具都需要对代码捅装,而当在目标环境下运行经过代码插装的可执行程序时,就会有覆盖分析数据产牛。这些数据是分析覆盖数据报告的重要输入条件,所以要顺利实现嵌入式系统覆盖分析的一个关键点是如何建立宿主机与目标机之间的物理/逻辑连接,解决覆盖分析数据信息的传输问题。
  3 BullseyeCoverage的实现方式
  BullseyeCoverage是Bllseye公司提供的一款C/C++代码覆盖率测试工具。相对于Rational公司的Pure Coverage,BullseyeCoverage支持的C/C++编译器更多,除了支持各种Unix下的编译器之外,在Windows下还支持VC、Borland C++、GNU C++和In C++。其提供的代码覆盖率是基于条件/判断的分支覆盖率,而不是一般的代码行覆盖率。
  BuuseyeCoverage采用的是先对代码进行插装,然后收集覆盖数据,zui后分析覆盖率原理的技术。其工作原理是:针对不同的编泽器,设计一个和真实编译器名字相同的拦截器,这些拦截器文件存放在BullseyeCoverage的bin目录下。当覆盖编译开关打开时,文件在编译过程中将首先被这些拦截器所拦截,而不是由真实的编译器去编译源代码。在这个拦截过程中,拦截器将一系列探针代码插入到C/C++源代码中,然后文件再次通过真实的编译器生成二进制代码。当覆盖编译开关关闭时,这些拦截器将直接调用真实的编译器而不进行代码插装的过程。两者的区别及调用关系如图1所示。

  当完成了代码插装并且将编译好的运行文件下载到嵌入式系统后,开始代码覆盖分析另外一个重要的工作过程——覆盖分析数据更新过程。由于BullseyeCoverage需要在运行时态对经过覆盖拦截器生成的覆盖分析文件(大小一般是运行代码的1.2~1.5倍)进行读写操作,所以可以对覆盖文件的大小进行简单的估计,以便设计系统。在数据更新过程中,BullseyeCoverage的每次读写操作范围为l字节~4 KB。另外,BullseyeCoverage只有在测试程序触发了cov_write函数时才会对覆盖分析文件进行更新。如果覆盖没有更新,那么相应地也没有I/O动作发生。针对嵌入式系统,BullseyeCoverage有两种实现的方式:
  ①利用读取内存区数据的原理。首先,通过串口、以太网或者USB将覆盖分析文件下载到嵌入式系统的某个未用内存区域;然后,修改测试工具的I/O库函数,将对覆盖分析文件操作的更新数据直接写入那块内存区域中。这样在测试开始后,分析程序会自动更新位于内存中的覆盖分析文件。由于覆盖分析文件在内存中,所以这种读写操作的速度会非常快。测试完成后,通过串口、网络或者USB再次将覆盖分析文件读回到PC机中,然后利用工具对覆盖结果进行分析。
   ②利用实际物理通道的原理。系统需要对覆盖分析文件的I/O操作进行封装,将需要更新的操作命令和更新内容通过串口、网络或者USB传递给宿主系统,而宿主系统需要实现一个简单的接收更新程序对覆盖文件进行更新。在这种实现方式中,zui困难的是对每次数据传输的缓冲区大小进行估计。由于BullseyeCoverage每次对覆盖分析文件的读写操作的范围是1字节~4 KB,而通常情况下,更新数据会是4~8字节的小数据块(在较频繁的操作中也会有100字节~4KB数据的更新块),所以Bullseye-Coverage会采取减少数据传递次数、增大数据块的做法,一次性传递完更新数据。如何保证数据的低延时是这种方式的关键点。  
  4 嵌入式操作系统Nucleus的具体应用
  Nucleus PLUS嵌入式操作系统是目前zui受欢迎的操作系统。Nucleus PLUS是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSIC写成的,因此非常便于移植,并能够支持大多数类型的处理器。Nucleus PLUSzui大的优势在于提供注释严格的C源代码给每一个用户。这样,用户能够深入地了解底层内核的运作方式,并可根据自己的特殊要求删减或改动系统软件,这对软件的规范化管理及系统软件的测试都有极大的帮助。
  基于时间效率的要求,在Nucleus嵌入式系统中实现代码覆盖分析采用的足内存存取操作的方式。具体实现过程如下:
  ①安装BullseyeCoverage,选择合适的编译器。由于使用PXA270作为开发平台,所以也选用了In C++编译器。安装完成后,从命令行输入命令"SET COVFILE="XXX""来设定覆盖分析文件的输出地点和具体名称。默认的名称是test.cov。
  ②修改Makefile,将编译器的路径设置到Bullseye-Coverage的bin目录下。
  ③使用命令"cov01-1"打开覆盖编译选项。然后编译代码,需要在编译过程中确定调用了BullseycCoverage的拦截器,可以通过查看编泽记录中是否含有"BullseyeCoverage Compile C++version platform"的信息确定。通常会在编译结束时发现链接错误,这是由于需要调用的函数实现体并没有编译、链接进来。
  ④进入到BullseyeCoverage的run目录下,根据系统平台要求修改libcov-user.h、atomic-user.h和Makefik文件,用-DSYS_user区编译BullseyeCoverage运行库文件。通过这个选项可以使编译器选择用户自定义的平台文件,在这些文件中就含有需要封装的一些函数,如write、read、open等。编译完的库文件可以命名为libeov-user.a或libcov-user.lib。
  ⑤修改要测试系统的编译文件,在Makefile的链接过程中加入libcov-user.a或libcov-user.lib。再次重新编译,应该没有任何错误。
  ⑥根据BullseyeCoverage的要求,将libcov-user.h中带有REQUIRED标识的函数根据具体情况实现。在这个过程中,建议首先实现error_write_screen,这样在后续过程中可以将错误信息打印到屏幕或者输出到测试日志中,然后逐步实现其他函数。
  ⑦实现了所有必需的函数后,重新编译一遍确定没有任何编译、链接问题。zui终会生成2个文件,一个是要运行的二进制文件(如rfs.bin),另外一个是覆盖分析文件test.cov。
  ⑧将ffs.bin和覆盖文件文件分别下载到系统中。其中,将ffs.bin下载到Flash存储器中,通过Nucleus的调试命令download将test.cov下载到系统内存中。
  ⑨运行二进制代码,在这个过程中,系统内存结构如图2所示。


  ⑩二进制代码运行完毕后,用Nucleus的调试命令upload将test.cov上载到PC机中。
  ⑾用Coverage Brozrset打开test.cov,覆盖分析结果就得到了。
  通过实验,在投有使用BullseyeCoverage时,一般测试方式的测试覆盖率大致是55%~70%;而通过使用BullseyeCoverage重新设计测试用例,测试覆盖率提高到了85%~90%,其中7%的测试用例直接影响到产品的质量。使用测试覆盖分析工具BullseyeCoverage可以使测试更有针对性,减少冗余测试用例测试,提高测试团队的工作效率,能够在开发过程中尽早地发现Bug。
 
  5 总 结
  测试覆盖分析是一种对测试阶段度量及测试工作情况进行分析的很好的方法,可以使测试程度更为明确,阶段进度一目了然,其统计值也便于管理部门对当前测试状态进行了解与把握。

免责声明:矿库网文章内容来源于网络,为了传递信息,我们转载部分内容,尊重原作者的版权。所有转载文章仅用于学习和交流之目的,并非商业用途。如有侵权,请及时联系我们删除。感谢您的理解与支持。

点赞 0
举报
收藏 0
评论 0
分享 0
承诺+测试 皖北煤电智能公司全力维护网络意识形态安全
6月6日,皖北煤电智能公司机关党支部党员连佳宇向笔者展示了刚刚签订的党员干部职工网络行为规范承诺书。当天下午,在机关党支部举行的承诺签字仪式上,共有30余名党员干部职工签署了承诺书。党员带头,职工紧跟,向不规范网络行为宣战,在该公司已蔚然成风。《皖北煤电集团公司党员干部网络行为规范》下发后,智能公司迅速

0评论2023-06-072216

数显扭矩测试仪详细介绍
详细介绍 一、功能用途 BT数显扭矩测试仪是为检测各种据矩而设计研发的一种检测仪器。适用各种扭医的检测和校正零件扭转性破坏试验等。主要用于检测各种电动、风动扭力批、扭力起子、螺丝刀、扭力板手和各种涉及拧紧力的仪器和产品,广泛应用于电气制造、机械制造、汽车轻工和专业科研和检测行业。 二、主要特点 ◆ 独具的测试过程中第一峰值保持功能 ◆ 独具的旋钮开关动作力与回弹力测试 ◆ 液晶显示屏,兰色背光灯

0评论2021-03-06450

便携式里氏硬度计的使用原理
便携式里氏硬度计的使用原理:    (1)对被测试件的一般要求: 试件表面应洁净,无灰尘,无油污和无氧化皮。    (2)对试件表面温度的要求:试件表面的温度不能过热,要求温度小于120℃。测试最佳温度为4℃-38℃。     (3)对试件表面粗糙度的要求:试件表面粗糙度应满足下表的要求,试件表面的粗糙度不但

0评论2021-03-06438

智能腐蚀测试仪
智能腐蚀测试仪     FSY-Ⅱ型智能腐蚀测试仪是应用现代腐蚀电化学理论,采用了先进的计算机技术,具有坚固美观的外型、操作简便等特点的腐蚀速率测试仪器。它可测量液体对金属的腐蚀速率,所测液体的电阻最高可达1MΩ,尤其适合测试水对金属的腐蚀速率,用来评价缓蚀剂的功效和预测金属设备在水中的使用寿命是非常有用的。由于该仪器具有多点自动连续测量,记录数据,绘制腐

0评论2021-03-0620818

旁路挂片器
旁路挂片器 一、结构特点     PGJ系列挂片测试器安装于循环水系统的旁路上,通过有机玻璃直观水色和试片(管)的腐蚀情况,也可监测新开设备的成膜情况。改进后的PGJ系列旁路挂片测试架采用了法兰式连接,从根本上杜绝了有机玻璃管安装使用时易碎,不能承受现场水压用户的需求。 二、技术指标 1.模拟流速:0.3-1m/s 2.可装2-24片试片 3.外型尺寸

0评论2021-03-05408

电子万能试验机可测试的项目
为什么叫万能的呢?这就要从它能测试的项目说起了。很多客户购买的电子万能试验机只是针对某种材料的某项性能进行测试。其实拉力试验机,还可以测试更多的项目呢。 可测试项目可分为普通测试项目和特殊测试项目。为测定材料刚性之系数,

0评论2020-12-1990

 

loading